#include "sched.h"
#include "mm.h"
#include "screen.h"
#include "stdio.h"
#include "syscall.h"
#include "test4.h"

void extend_memory(void)
{
    sys_move_cursor(0, 0);
    printf("in task!!!\n");
    int count = 0;
    int i, j;
    int odd = 1;
    uint64_t mem;
    uint64_t result;
    //printf("stack_top:0x%x", current_running[core_id]->user_context.reg[29]);
    //sys_get_TLB_info();

    for (i = 0; i < 8; i++)
    {
        mem = i * 0x1000;
        *(uint64_t *)mem = rand();
    }

    while (1)
    {
        for (i = 0; i < 8; i++)
        {
            sys_move_cursor(1, i + 1);
            mem = i * 0x1000;
            result = *(uint64_t *)mem;
            printf("vaddr: 0x%x data: 0x%x (%d) ==== f_pfn: %d pt_entry :0x%x\n", mem, result, count, current_running[0]->page_table[i].f_pfn, current_running[0]->page_table[i].pt_entry);
            sys_move_cursor(1, 10);
            printf("==== page_frame_status ====\n");
            for (j = 0; j < 10; j++)
            {
                printf("page frame[%d] SD: %d\n", j, page_frame[j].sd_card);
            }
        }
        count++;
    }
}

// #include "sched.h"
// #include "screen.h"
// #include "stdio.h"
// #include "syscall.h"
// #include "time.h"

// #include "test4.h"

// #define RW_TIMES 5

// void extend_memory()
// {
//     int mem1, mem2 = 0;
//     int curs = 0;
//     int memory[RW_TIMES * 2];

//     int i = 0;
//     mem1 = 0x40000;
//     for (i = 0; i < RW_TIMES; i++, mem1 += 0x10000)
//     {
//         //sys_move_cursor(1, curs + i);
//         //mem1 = 0x40000;
//         memory[i] = mem2 = i;
//         sys_sleep(1);
//         *(int *)mem1 = mem2;
//         sys_move_cursor(1, i);
//         printf("Write: 0x%x,%d", mem1, mem2);
//     }
//     curs = RW_TIMES;
//     mem1 = 0x40000;
//     for (i = 0; i < RW_TIMES; i++, mem1 += 0x10000)
//     {
//         sys_move_cursor(1, i + RW_TIMES + 2);
//         memory[i + RW_TIMES] = *(int *)mem1;
//         if (memory[i + RW_TIMES] == memory[i])
//             printf("Read succeed: 0x%x,%d", mem1, memory[i + RW_TIMES]);
//         else
//             printf("Read error: 0x%x,%d", mem1, memory[i + RW_TIMES]);
//     }
//     sys_exit();
// }
